/**
 * v-clipboard 文字复制剪贴
 * Copyright (c) 2021 iswork
 */

import Clipboard from 'clipboard'

export default {
    bind (el, binding, vnode) {
        switch (binding.arg) {
            case 'success':
                el._vClipBoard_success = binding.value;
                break;
            case 'error':
                el._vClipBoard_error = binding.value;
                break;
            default: {
                const clipboard = new Clipboard(el, {
                    text: () => binding.value,
                    action: () => binding.arg === 'cut' ? 'cut' : 'copy'
                });
                clipboard.on('success', e => {
                    const callback = el._vClipBoard_success;
                    callback && callback(e);
                });
                clipboard.on('error', e => {
                    const callback = el._vClipBoard_error;
                    callback && callback(e);
                });
                el._vClipBoard = clipboard;
            }
        }
    },
    update (el, binding) {
        if (binding.arg === 'success') {
            el._vClipBoard_success = binding.value;
        } else if (binding.arg === 'error') {
            el._vClipBoard_error = binding.value;
        } else {
            el._vClipBoard.text = function () {
                return binding.value;
            };
            el._vClipBoard.action = () => binding.arg === 'cut' ? 'cut' : 'copy';
        }
    },
    unbind (el, binding) {
        if (!el._vClipboard) return
        if (binding.arg === 'success') {
            delete el._vClipBoard_success;
        } else if (binding.arg === 'error') {
            delete el._vClipBoard_error;
        } else {
            el._vClipBoard.destroy();
            delete el._vClipBoard;
        }
    }
}
